{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 组合投资理论基础"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 单期，多期收益率，连续复利\n",
    "\n",
    "https://zhuanlan.zhihu.com/p/514862524\n",
    "\n",
    "https://www.zhihu.com/column/c_1335724136769540096\n",
    "\n",
    "如果把一段时间内每一期的资产价格按照时间先后顺序排列起来，将得到资产价格的时间序列。第一期为P1，后续为P2等。假设投资者在t-1时投某资产，投入价格为Pt-1，持有一期后以Pt的价格卖掉。不考虑交易成本，其单期收益率Rt的计算公式为：\n",
    "\n",
    "<img src=https://pic2.zhimg.com/80/v2-00bdd267e1dccaa97fcc824efbe5b1ed_720w.webp width=30% />\n",
    "\n",
    "\n",
    "* 多期简单收益率\n",
    "\n",
    "根据上面公式，二期的单期收益率Rt(2)为：\n",
    "\n",
    "<img src=https://pic3.zhimg.com/80/v2-785ad915adbdf911c319e8d2d25fc126_720w.webp width=30% />\n",
    "\n",
    "推导下来，多期简单收益率则为：\n",
    "\n",
    "若投资者在t-k期以价格Pt-k买入该资产，在t期卖出，则k期单期收益率Rt(k)为：\n",
    "\n",
    "<img src=https://pic3.zhimg.com/80/v2-1aff916f31ddc34c724eea356650fb06_720w.webp width=30% />\n",
    "\n",
    "\n",
    "\n",
    "* 单期与多期简单收益率的关系\n",
    "\n",
    "以两期的简单收益率为例，可以将其分解为两个单期简单收益率的乘积的形式。\n",
    "<img src=https://pic1.zhimg.com/80/v2-0d70aca1f732fc7dfbfc68d3f0148c60_720w.webp width=30% />\n",
    "\n",
    "其中 （1+Rt）*(1+Rt-1) 的概念就是复利。\n",
    "\n",
    "* 平均收益率\n",
    "\n",
    "而如果不考虑复利，也就是说每一期获得的收益都没有再投入资产中的收益就是简单的单期收益加总。\n",
    "\n",
    "$$ R_t(k)=\\sum_{j=0}^{k-1}{R_{t-j}} $$ \n",
    "\n",
    "如果只知道多期收益，要计算单期收益率的平均值，并且不考虑复利，那么公式为：\n",
    "\n",
    "$$ 算术平均收益率=\\frac{R_t(k)}{k}=\\frac{\\sum_{j=0}^{k-1}{R_{t-j}}}{k} $$\n",
    "\n",
    "如果只知道多期收益，要计算单期收益率的平均值，并且考虑复利，那么公式为：\n",
    "\n",
    "$$ 几何平均收益率 = \\sqrt[k]{R_t(k)+1}-1=\\sqrt[k]{\\prod_{j=0}^{k-1}(1+R_{t-j})}-1 $$\n",
    "\n",
    "* 七日年化\n",
    "\n",
    "七日年化收益率是货币基金最近7日的平均收益水平，进行年化以后得出的数据；7日年化收益率上显示的收益率是年化收益率，也就是说投资这款理财产品一年可以获得的收益。\n",
    "\n",
    "* 连续复利收益率\n",
    "\n",
    "单期与多期连续复利收益率的关系\n",
    "我们以两期连续复利收益率为例，两期连续复利收益率等于前一天和当天的单期复利收益\n",
    "\n",
    "率之和。进而推知，k期连续复利收益率为k天的单期连续复利收益率之和。这体现了连续\n",
    "\n",
    "复利收益率的优良性质：单期加总得到多期。\n",
    "<img src=https://pic4.zhimg.com/80/v2-da9072b4cb2dc03a8a8985cf50167e37_720w.webp width=30% />"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "(r2+1)**(1/n)-1=r"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## classwork1（收益率的计算）\n",
    "\n",
    "1, 导入中国平安\"000001\" 从日期\"20200301\"到'20230207'的收盘价\n",
    "\n",
    "2，以1天为一期，分别计算第一第二天的单期收益率，及其二期收益率，比较二期收益率与第一第二的单期收益率的关系\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import akshare as ak\n",
    "import pandas as pd\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "stock_pinan = ak.stock_zh_a_hist(symbol=\"000001\", period=\"daily\", start_date=\"20200301\", end_date='20230207', adjust=\"\")[\"收盘\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0      14.79\n",
       "1      14.72\n",
       "2      14.69\n",
       "3      15.39\n",
       "4      15.03\n",
       "       ...  \n",
       "708    14.70\n",
       "709    14.60\n",
       "710    14.32\n",
       "711    14.00\n",
       "712    14.21\n",
       "Name: 收盘, Length: 713, dtype: float64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_pinan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.004732927653820048"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(stock_pinan[1]-stock_pinan[0])/stock_pinan[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.0047329276538200515"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_pinan[1]/stock_pinan[0]-1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.0020380434782609758"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_pinan[2]/stock_pinan[1]-1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.006761325219743042"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_pinan[2]/stock_pinan[0]-1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.006770971132081027"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_pinan[1]/stock_pinan[0]-1+stock_pinan[2]/stock_pinan[1]-1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.006761325219743042"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(1-0.004732927653820048)*(1-0.0020380434782609758)-1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## classwork2（多期收益率连续复利计算）\n",
    "\n",
    "1，计算最开始的七日收益率，并基于此计算七日年化收益率\n",
    "\n",
    "2，计算第一第二天的单期连续复利，计算二期连续复利，比较两者之间的关系\n",
    "\n",
    "3, 1天为期，计算所有期的单期收益率和所有期的连续复利,并可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "(stock_pinan/stock_pinan.shift(1)-1).plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.log(stock_pinan/stock_pinan.shift(1)).plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0        NaN\n",
       "1      14.79\n",
       "2      14.72\n",
       "3      14.69\n",
       "4      15.39\n",
       "       ...  \n",
       "708    14.99\n",
       "709    14.70\n",
       "710    14.60\n",
       "711    14.32\n",
       "712    14.00\n",
       "Name: 收盘, Length: 713, dtype: float64"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_pinan.shift(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.004744163421978154"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.log(stock_pinan[1]/stock_pinan[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.002040123114944349"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.log(stock_pinan[2]/stock_pinan[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.006784286536922466"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.log(stock_pinan[2]/stock_pinan[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.0067842865369225035"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "-0.004744163421978154-0.002040123114944349"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.006761325219743042"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_pinan[7]/stock_pinan[0]-1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.2363662853131543"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "((stock_pinan[7]/stock_pinan[0])**(1/7)-1)*244"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.23568047908818604"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(stock_pinan[7]/stock_pinan[0]-1)/7*244"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "#(stock_pinan[7]/stock_pinan[0]-1)**(1/7)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 资产风险的测度\n",
    "\n",
    "\n",
    "## 风险与方差\n",
    "\n",
    "Markowitz首先提出来用方差来度量风险。单个资产的风险具体可以表达为：\n",
    "\n",
    "$$ \\sigma^2(R)=E\\{[R-E(R)]^2\\} $$\n",
    "\n",
    "其中，R是所有可能发生的（或者已经实现的）收益率（随机变量），E（R）表示预期收益率。若收益率R是离散分布，则：\n",
    "\n",
    "$$ \\sigma^2(R)=\\sum_{K}{p_k[R_k-E(R)]} $$\n",
    "\n",
    "方差风险度量法观念简单，容易理解，但是也有一些弊端。比如这一定义偏离了风险的本意，风险往往认为是潜在的损失，而方差是一个中性的概念，只有向下的波动才和风险本义相契合，向上的波动反而会让投资者获益，无法反应风险的经济性质。并且Markowitz在构建均值-方差投资组合时，将收益率看成服从正态分布，这是一个重要假设，这样才能忽略收益率的偏度和峰度等统计特性，只需考虑均值、方差即可，但实际上很多产品的收益率是不满足正态分布的，具有明显的偏度和峰度，继续使用方差度量风险可能会带来较大的误差。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "r=stock_pinan.shift(1)/stock_pinan-1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "r.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.022092094022788313"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "((r-r.mean())**2).mean()**0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0004880606183117191"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "((r-r.mean())**2).mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0004887470608128608"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r.var()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.022107624495021187"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r.std()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 下行风险\n",
    "\n",
    "在Markowitz之后，Roy于1952年提出了用下行偏差（Downside Deviation）来度量风险的办法。下行偏差法和方差法类似，不过更贴近现实中投资者对风险的理解（只考虑低于目标收益率的变动）。计算下行偏差时，一个最重要的变量就是目标收益率，通常用可接受的最低收益率（Minimum Acceptable Rate of Return，MARR）来表示，MARR可以是无风险利率或者0，或者资产收益率的平均值。下行偏差描述的是低于MARR的收益率的发散程度，总体的下行偏差公式如下：\n",
    "\n",
    "$$ \\delta（R, MARR）=\\sqrt{E\\{[min(R-MARR,0)]^2\\}} $$\n",
    "若我们有R1，R2，...，RT作为R的随即样本，则样本额下行偏差为：\n",
    "\n",
    "$$ \\delta（R, MARR）=\\sqrt{\\frac{1}{T}\\sum_{t=1}^{T}\\{[min(R-MARR,0)]^2\\}} $$\n",
    "\n",
    "用下行偏差描述的风险称为下行风险（Downside Risk）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.00026052540201265304"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(r[r<r.mean()]**2).sum()/len(r)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 最大回撤\n",
    "\n",
    "实务上经常会用最大回撤（Maximum Drawdown，MDD）来衡量投资（特别是基金，股票投资组合）的表现，在介绍最大回撤前，我们先来了解下什么是回撤。某资产（或投资组合）在时刻T的回撤是指资产在（0，T）的最高峰值与现在价格 \n",
    " 之间的回落值，用数学公式表达为：\n",
    " \n",
    "$$ D(T)=max\\{0,max_{t\\in(0,T)}\\{P_t-P_T\\}\\} $$\n",
    " \n",
    " 对应的回撤率为：\n",
    " \n",
    "$$ d(T)=\\frac{D(T)}{max_{t\\in(0,T)}P_t} $$\n",
    " \n",
    "知晓回撤的含义，最大回撤就比较好理解了，资产在T时刻的最大回撤就是资产在（0，T）时段内回撤的最大值。直观地说就是这一时段内，资产价值从最高峰回落到最低谷的幅度。最大回撤通常用来描述投资者在持有资产时可能面临的最大亏损。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## classwork3(风险的计算)\n",
    "\n",
    "* 求中国平安从日期\"20200301\"到'20230207'的风险，下行风险，回测，回测率，最大回测\n",
    "\n",
    "* 在页面上实现选择不同的股票的不同时间段，自动计算以上量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "r_pinan=stock_pinan/stock_pinan.shift(1)-1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "r_pinan=r_pinan.dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0004978777510949548"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "((r_pinan-r_pinan.mean())**2).mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.02231317438409324"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "((r_pinan-r_pinan.mean())**2).mean()**0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0004985780010964948"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r_pinan.var()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.022328860273119512"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r_pinan.std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.014634292206590085"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(((r_pinan[r_pinan<r_pinan.mean()]-r_pinan.mean())**2).sum()/len(r_pinan))**0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "10.8"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_pinan.max()-stock_pinan.iloc[-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.4318272690923631"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(stock_pinan.max()-stock_pinan.iloc[-1])/stock_pinan.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "14.670000000000002"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_pinan.max()-stock_pinan.min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import streamlit as st\n",
    "x = st.slider('x')\n",
    "st.write(x, 'squared is', x * x)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 组合投资的收益与风险\n",
    "\n",
    "\n",
    "https://zhuanlan.zhihu.com/p/361234664\n",
    "\n",
    "* 收益是有不确定性的\n",
    "\n",
    "* 收益越高不确定性越大"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 投资组合的收益率\n",
    "\n",
    "在拓展到N中风险资产之前，先来看两种资产的情况。假设现在市场有资产A和资产B，其随机收益率分别为 \n",
    "$R_A$和$R_B$,若投资人将其财富的一部分投入资产A，剩下的全部投入资产B，投资比例分别为$\\omega_A$和$\\omega_B$\n",
    "我们就可以求得投资组合的收益率  ，就是总收益除以初始资本\n",
    "\n",
    "$$ R_p = {\\omega_AR_A+\\omega_BR_B} $$\n",
    "$$\\omega_A+\\omega_B=1$$\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.18000000000000005"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "0.1*0.2+0.2*0.8"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### akshare中多个股票数据的组合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "stock_set = ['000413','000063','002007',\"000001\",\"000002\"]\n",
    "\n",
    "#000413 东旭光电，000063 中兴通讯，002007 华兰生物，000001 平安银行，000002 万科A\n",
    "#https://zhuanlan.zhihu.com/p/20604930?refer=quantstory"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "p0=ak.stock_zh_a_hist(symbol=\"000413\", period=\"daily\", start_date=\"20210201\", end_date='20230201', \n",
    "                     adjust=\"hfq\")[[\"日期\",\"收盘\"]]\n",
    "p0.set_index(\"日期\",inplace=True)\n",
    "\n",
    "for i in stock_set[1:]:\n",
    "    p1=ak.stock_zh_a_hist(symbol=i, period=\"daily\", start_date=\"20210201\", end_date='20230201', \n",
    "                     adjust=\"hfq\")[[\"日期\",\"收盘\"]]\n",
    "    p1.set_index(\"日期\",inplace=True)\n",
    "    p0=pd.concat([p0,p1],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "p0.columns=stock_set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [],
   "source": [
    "#help(p0.fillna)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "p0=p0.fillna(method=\"ffill\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>000413</th>\n",
       "      <th>000063</th>\n",
       "      <th>002007</th>\n",
       "      <th>000001</th>\n",
       "      <th>000002</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>日期</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2021-02-01</th>\n",
       "      <td>7.09</td>\n",
       "      <td>437.28</td>\n",
       "      <td>1251.42</td>\n",
       "      <td>4129.64</td>\n",
       "      <td>4464.71</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-02</th>\n",
       "      <td>7.12</td>\n",
       "      <td>429.46</td>\n",
       "      <td>1276.79</td>\n",
       "      <td>3923.23</td>\n",
       "      <td>4500.06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-03</th>\n",
       "      <td>7.00</td>\n",
       "      <td>432.33</td>\n",
       "      <td>1252.20</td>\n",
       "      <td>4194.65</td>\n",
       "      <td>4445.07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-04</th>\n",
       "      <td>6.55</td>\n",
       "      <td>426.46</td>\n",
       "      <td>1234.60</td>\n",
       "      <td>4137.77</td>\n",
       "      <td>4441.15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-05</th>\n",
       "      <td>6.61</td>\n",
       "      <td>418.63</td>\n",
       "      <td>1336.31</td>\n",
       "      <td>4191.40</td>\n",
       "      <td>4570.75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-19</th>\n",
       "      <td>6.73</td>\n",
       "      <td>371.94</td>\n",
       "      <td>663.21</td>\n",
       "      <td>2658.44</td>\n",
       "      <td>3509.87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-20</th>\n",
       "      <td>6.79</td>\n",
       "      <td>379.11</td>\n",
       "      <td>655.70</td>\n",
       "      <td>2664.95</td>\n",
       "      <td>3513.80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-30</th>\n",
       "      <td>6.85</td>\n",
       "      <td>374.55</td>\n",
       "      <td>642.76</td>\n",
       "      <td>2668.20</td>\n",
       "      <td>3449.65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-31</th>\n",
       "      <td>6.85</td>\n",
       "      <td>369.72</td>\n",
       "      <td>632.41</td>\n",
       "      <td>2642.19</td>\n",
       "      <td>3475.83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-02-01</th>\n",
       "      <td>6.91</td>\n",
       "      <td>374.16</td>\n",
       "      <td>635.77</td>\n",
       "      <td>2595.06</td>\n",
       "      <td>3462.74</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>482 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            000413  000063   002007   000001   000002\n",
       "日期                                                   \n",
       "2021-02-01    7.09  437.28  1251.42  4129.64  4464.71\n",
       "2021-02-02    7.12  429.46  1276.79  3923.23  4500.06\n",
       "2021-02-03    7.00  432.33  1252.20  4194.65  4445.07\n",
       "2021-02-04    6.55  426.46  1234.60  4137.77  4441.15\n",
       "2021-02-05    6.61  418.63  1336.31  4191.40  4570.75\n",
       "...            ...     ...      ...      ...      ...\n",
       "2023-01-19    6.73  371.94   663.21  2658.44  3509.87\n",
       "2023-01-20    6.79  379.11   655.70  2664.95  3513.80\n",
       "2023-01-30    6.85  374.55   642.76  2668.20  3449.65\n",
       "2023-01-31    6.85  369.72   632.41  2642.19  3475.83\n",
       "2023-02-01    6.91  374.16   635.77  2595.06  3462.74\n",
       "\n",
       "[482 rows x 5 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>收盘</th>\n",
       "      <th>收盘</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>日期</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2021-02-01</th>\n",
       "      <td>437.28</td>\n",
       "      <td>7.09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-02</th>\n",
       "      <td>429.46</td>\n",
       "      <td>7.12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-03</th>\n",
       "      <td>432.33</td>\n",
       "      <td>7.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-04</th>\n",
       "      <td>426.46</td>\n",
       "      <td>6.55</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-05</th>\n",
       "      <td>418.63</td>\n",
       "      <td>6.61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-20</th>\n",
       "      <td>379.11</td>\n",
       "      <td>6.79</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-30</th>\n",
       "      <td>374.55</td>\n",
       "      <td>6.85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-31</th>\n",
       "      <td>369.72</td>\n",
       "      <td>6.85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-02-01</th>\n",
       "      <td>374.16</td>\n",
       "      <td>6.91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-03-31</th>\n",
       "      <td>NaN</td>\n",
       "      <td>7.54</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>482 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                收盘    收盘\n",
       "日期                      \n",
       "2021-02-01  437.28  7.09\n",
       "2021-02-02  429.46  7.12\n",
       "2021-02-03  432.33  7.00\n",
       "2021-02-04  426.46  6.55\n",
       "2021-02-05  418.63  6.61\n",
       "...            ...   ...\n",
       "2023-01-20  379.11  6.79\n",
       "2023-01-30  374.55  6.85\n",
       "2023-01-31  369.72  6.85\n",
       "2023-02-01  374.16  6.91\n",
       "2021-03-31     NaN  7.54\n",
       "\n",
       "[482 rows x 2 columns]"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.concat([p1,p0],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [],
   "source": [
    "p=ak.stock_zh_a_hist(symbol=\"000413\", period=\"daily\", start_date=\"20210201\", end_date='20230201', \n",
    "                     adjust=\"hfq\")[[\"日期\",\"收盘\"]]\n",
    "p.set_index(\"日期\",inplace=True)\n",
    "p.columns=[\"000413\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [],
   "source": [
    "for i in stock_set[1:]:\n",
    "    p_i=ak.stock_zh_a_hist(symbol=i, period=\"daily\", start_date=\"20210201\", end_date='20230201', \n",
    "                     adjust=\"hfq\")[[\"日期\",\"收盘\"]]\n",
    "    p_i.set_index(\"日期\",inplace=True)\n",
    "    p_i.columns=[i]\n",
    "    p=pd.concat([p,p_i],axis=1)\n",
    "\n",
    "p.fillna(method=\"ffill\",inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>000413</th>\n",
       "      <th>000063</th>\n",
       "      <th>002007</th>\n",
       "      <th>000001</th>\n",
       "      <th>000002</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>日期</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2021-02-01</th>\n",
       "      <td>7.09</td>\n",
       "      <td>437.28</td>\n",
       "      <td>1251.42</td>\n",
       "      <td>4129.64</td>\n",
       "      <td>4464.71</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-02</th>\n",
       "      <td>7.12</td>\n",
       "      <td>429.46</td>\n",
       "      <td>1276.79</td>\n",
       "      <td>3923.23</td>\n",
       "      <td>4500.06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-03</th>\n",
       "      <td>7.00</td>\n",
       "      <td>432.33</td>\n",
       "      <td>1252.20</td>\n",
       "      <td>4194.65</td>\n",
       "      <td>4445.07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-04</th>\n",
       "      <td>6.55</td>\n",
       "      <td>426.46</td>\n",
       "      <td>1234.60</td>\n",
       "      <td>4137.77</td>\n",
       "      <td>4441.15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-05</th>\n",
       "      <td>6.61</td>\n",
       "      <td>418.63</td>\n",
       "      <td>1336.31</td>\n",
       "      <td>4191.40</td>\n",
       "      <td>4570.75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-19</th>\n",
       "      <td>6.73</td>\n",
       "      <td>371.94</td>\n",
       "      <td>663.21</td>\n",
       "      <td>2658.44</td>\n",
       "      <td>3509.87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-20</th>\n",
       "      <td>6.79</td>\n",
       "      <td>379.11</td>\n",
       "      <td>655.70</td>\n",
       "      <td>2664.95</td>\n",
       "      <td>3513.80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-30</th>\n",
       "      <td>6.85</td>\n",
       "      <td>374.55</td>\n",
       "      <td>642.76</td>\n",
       "      <td>2668.20</td>\n",
       "      <td>3449.65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-31</th>\n",
       "      <td>6.85</td>\n",
       "      <td>369.72</td>\n",
       "      <td>632.41</td>\n",
       "      <td>2642.19</td>\n",
       "      <td>3475.83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-02-01</th>\n",
       "      <td>6.91</td>\n",
       "      <td>374.16</td>\n",
       "      <td>635.77</td>\n",
       "      <td>2595.06</td>\n",
       "      <td>3462.74</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>482 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            000413  000063   002007   000001   000002\n",
       "日期                                                   \n",
       "2021-02-01    7.09  437.28  1251.42  4129.64  4464.71\n",
       "2021-02-02    7.12  429.46  1276.79  3923.23  4500.06\n",
       "2021-02-03    7.00  432.33  1252.20  4194.65  4445.07\n",
       "2021-02-04    6.55  426.46  1234.60  4137.77  4441.15\n",
       "2021-02-05    6.61  418.63  1336.31  4191.40  4570.75\n",
       "...            ...     ...      ...      ...      ...\n",
       "2023-01-19    6.73  371.94   663.21  2658.44  3509.87\n",
       "2023-01-20    6.79  379.11   655.70  2664.95  3513.80\n",
       "2023-01-30    6.85  374.55   642.76  2668.20  3449.65\n",
       "2023-01-31    6.85  369.72   632.41  2642.19  3475.83\n",
       "2023-02-01    6.91  374.16   635.77  2595.06  3462.74\n",
       "\n",
       "[482 rows x 5 columns]"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### classwork4（编程计算组合收益）\n",
    "\n",
    "1， 求这些股票每天的单期收益率与单期连续收益率\n",
    "\n",
    "2， 已知投资权重为[0.2,0.3,0.2,0.2,0.1], 求此权重下每天的组合收益率(np.dot，点乘的机制)\n",
    "\n",
    "3， 此投资组合下最终的收益率和连续收益率是多少？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "r=(p0/p0.shift(1)-1).dropna()\n",
    "r_log=np.log(p0/p0.shift(1)).dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "r_n=np.dot(r,np.array([0.2,0.3,0.2,0.2,0.1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "weight=np.array([0.2,0.3,0.2,0.2,0.1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.012715105464818532"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r_n.std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#np.dot((p/p.shift(1)-1),np.array([0.2,0.3,0.2,0.2,0.1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#np.dot(weight.T,(p/p.shift(1)-1).values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "000413   -0.025716\n",
       "000063   -0.158173\n",
       "002007   -0.677197\n",
       "000001   -0.464581\n",
       "000002   -0.254144\n",
       "dtype: float64"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(np.log(p)-np.log(p.shift(1))).sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>000413</th>\n",
       "      <th>000063</th>\n",
       "      <th>002007</th>\n",
       "      <th>000001</th>\n",
       "      <th>000002</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>日期</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2021-02-01</th>\n",
       "      <td>7.09</td>\n",
       "      <td>437.28</td>\n",
       "      <td>1251.42</td>\n",
       "      <td>4129.64</td>\n",
       "      <td>4464.71</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-02</th>\n",
       "      <td>7.12</td>\n",
       "      <td>429.46</td>\n",
       "      <td>1276.79</td>\n",
       "      <td>3923.23</td>\n",
       "      <td>4500.06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-03</th>\n",
       "      <td>7.00</td>\n",
       "      <td>432.33</td>\n",
       "      <td>1252.20</td>\n",
       "      <td>4194.65</td>\n",
       "      <td>4445.07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-04</th>\n",
       "      <td>6.55</td>\n",
       "      <td>426.46</td>\n",
       "      <td>1234.60</td>\n",
       "      <td>4137.77</td>\n",
       "      <td>4441.15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-05</th>\n",
       "      <td>6.61</td>\n",
       "      <td>418.63</td>\n",
       "      <td>1336.31</td>\n",
       "      <td>4191.40</td>\n",
       "      <td>4570.75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-19</th>\n",
       "      <td>6.73</td>\n",
       "      <td>371.94</td>\n",
       "      <td>663.21</td>\n",
       "      <td>2658.44</td>\n",
       "      <td>3509.87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-20</th>\n",
       "      <td>6.79</td>\n",
       "      <td>379.11</td>\n",
       "      <td>655.70</td>\n",
       "      <td>2664.95</td>\n",
       "      <td>3513.80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-30</th>\n",
       "      <td>6.85</td>\n",
       "      <td>374.55</td>\n",
       "      <td>642.76</td>\n",
       "      <td>2668.20</td>\n",
       "      <td>3449.65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-31</th>\n",
       "      <td>6.85</td>\n",
       "      <td>369.72</td>\n",
       "      <td>632.41</td>\n",
       "      <td>2642.19</td>\n",
       "      <td>3475.83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-02-01</th>\n",
       "      <td>6.91</td>\n",
       "      <td>374.16</td>\n",
       "      <td>635.77</td>\n",
       "      <td>2595.06</td>\n",
       "      <td>3462.74</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>482 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            000413  000063   002007   000001   000002\n",
       "日期                                                   \n",
       "2021-02-01    7.09  437.28  1251.42  4129.64  4464.71\n",
       "2021-02-02    7.12  429.46  1276.79  3923.23  4500.06\n",
       "2021-02-03    7.00  432.33  1252.20  4194.65  4445.07\n",
       "2021-02-04    6.55  426.46  1234.60  4137.77  4441.15\n",
       "2021-02-05    6.61  418.63  1336.31  4191.40  4570.75\n",
       "...            ...     ...      ...      ...      ...\n",
       "2023-01-19    6.73  371.94   663.21  2658.44  3509.87\n",
       "2023-01-20    6.79  379.11   655.70  2664.95  3513.80\n",
       "2023-01-30    6.85  374.55   642.76  2668.20  3449.65\n",
       "2023-01-31    6.85  369.72   632.41  2642.19  3475.83\n",
       "2023-02-01    6.91  374.16   635.77  2595.06  3462.74\n",
       "\n",
       "[482 rows x 5 columns]"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.0257157 , -0.15589021, -0.67719732, -0.4645806 , -0.25414408]])"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.log(p.tail(1).values)-np.log(p.head(1).values)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 投资组合的风险\n",
    "\n",
    "资产风险的衡量我们上一节讲过了，这里我们还沿用收益率的方差来指代风险。单个资产收益率的方差为：\n",
    "\n",
    "$$ \\sigma^2(R_i)=E\\{[R_i-E(R_i)]^2\\ $$\n",
    "\n",
    "两个资产组成的投资组合的方差为：\n",
    "\n",
    "$$ \\sigma^2(R_p)=E\\{[R_p-E(R_p)]^2\\} $$\n",
    "\n",
    "$$ =E\\{[\\omega_AR_A+\\omega_BR_B-E(\\omega_AR_A+\\omega_BR_B)]^2\\} $$\n",
    "\n",
    "$$ =E\\{\\{\\omega_A[R_A-E(R_A)])+\\omega_B[R_B-E(R_B)]\\}^2\\} $$\n",
    "\n",
    "$$ =E\\{\\omega^2_A[R_A-E(R_A)]^2)+\\omega^2_B[R_B-E(R_B)]^2+2\\omega_A\\omega_B[R_A-E(R_A)][R_B-E(R_B)]\\} $$\n",
    "\n",
    "$$ =\\omega^2_A\\sigma^2(R_A)+\\omega^2_B\\sigma^2(R_B)+2\\omega_A\\omega_B\\sigma(R_A,R_B) $$\n",
    "\n",
    "其中 $ \\sigma(R_A,R_B) $为资产A与资产B的协方差，也可以写作 $ Cov（R_A,R_B）$ \n",
    "$$ Cov(R_A,R_B)=E\\{[R_A-E(R_A)][R_B-E(R_B)]\\} $$\n",
    "\n",
    "从上式可以看出，如果资产A与资产B收益率变化趋势一致（你为正，我也为正），那么协方差为正；反之（我赚了，你赔了）则为负。所以协方差也就是描述两个变量有多大的“可能”朝一个方向改变，但是协方差会受比例影响，比如A扩大十倍收益率，B扩大十倍收益率，那么协方差会扩大100倍。还有就是相关系数，更能刻画两者的相关度。相关系数和协方差的关系如下关系式：\n",
    "\n",
    "$$ \\rho(A,B)=\\frac{\\sigma(R_A,R_B)}{\\sigma(R_A)\\sigma(R_B)} $$\n",
    "\n",
    "当把两个投资组合推广到n个投资组合的时候，我们就得到了如下公式：\n",
    "\n",
    "$$ \\sigma^2(R_p)=\\sigma^2(\\sum_{i=1}^{N}{\\omega_iR_i})=\\sum_{i=1}^{N}{\\omega_i^2\\sigma^2(R_i)}+\\sum_{i\\ne j}{\\omega_i\\omega_j\\sigma(R_i,R_j)} $$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "#r_n=np.dot((p/p.shift(1)-1),np.array([0.2,0.3,0.2,0.2,0.1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.012715105464818532"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r_n[1:].std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "000413    0.017650\n",
       "000063    0.020236\n",
       "002007    0.023556\n",
       "000001    0.020829\n",
       "000002    0.018328\n",
       "dtype: float64"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(p/p.shift(1)-1).dropna().std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "weight=np.array([0.2,0.3,0.2,0.2,0.1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.012728343475134648"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(np.dot(weight, np.dot(r.cov(), weight)))#协方差计算"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### classwork5（编程计算组合风险）\n",
    "\n",
    "1， 求这些股票的组合风险（两种方法1，先求组合收益再求风险，2 直接通过协方差求）\n",
    "\n",
    "2， 求这些股票单个风险，并与上题比较\n",
    "\n",
    "3， 蒙特卡洛模拟，随机生成weight数据，并基于此计算此投资组合的此时间段的收益与风险\n",
    "\n",
    "4,  在页面上实现输入不同的股票组合，生成股票组合的收益风险散点图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.08332207, 0.04651511, 0.24801942, 0.44767755, 0.17446585])"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#随机生成投资组合的权重\n",
    "weight_ram = np.random.random(len(stock_set))\n",
    "weight_ram=weight_ram/np.sum(weight_ram)\n",
    "weight_ram"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "x=[]\n",
    "y=[]\n",
    "for i in range(1000):\n",
    "    weights = np.random.random(len(stock_set))\n",
    "    weights = weights/np.sum(weights)\n",
    "    y.append(np.sum(np.dot(r_log.dropna(),weights)))\n",
    "    x.append(np.sqrt(np.dot(weights, np.dot(r_log.dropna().cov(), weights))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD8CAYAAAB0IB+mAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAs60lEQVR4nO3df5RT53kn8O8joQkaaBA4hIBiB2/WP2KMzYTZ1Gu2uzMksVNT29O4sZtNUns3XU56mnbtddhO4iTGqdNMl7ju5pyedr1t1rRxDI5xxzikwY7taU5gcQIZwLAxdhL/wBoau8DQDCMYzcyzf0hXXF3de3V/6uf3cw6HkXSl+0oMj977vM/7vqKqICKi9pdodAOIiKg+GPCJiDoEAz4RUYdgwCci6hAM+EREHYIBn4ioQ0QS8EXkQyJyRER+KiKDNo+LiHyt9PhBEXlvFOclIiLvQgd8EUkC+AsAvw7gMgAfFZHLLIf9OoCLSn/WA/jLsOclIiJ/oujhvw/AT1X156o6BWALgBstx9wI4G+1aA+AjIgsjeDcRETk0ZwIXiML4Kjp9usAftXDMVkAx9xe+G1ve5suX748gibWdvr0acybN68u54oD299YbH9jsf3n7Nu3759VdbHdY1EEfLG5z7peg5djigeKrEcx7YMlS5bgq1/9arjWeTQxMYH58+fX5VxxYPsbi+1vLLb/nP7+/ledHosi4L8O4HzT7XcCGAtwDABAVR8A8AAA9Pb2al9fXwRNrG1kZAT1Olcc2P7GYvsbi+33Jooc/o8AXCQiF4pIF4DfBrDdcsx2AL9Tqta5CsApVXVN5xARUbRC9/BVdVpEPg1gJ4AkgK+r6mER+VTp8b8C8B0A1wH4KYBJAP8p7HmJiMifKFI6UNXvoBjUzff9lelnBfD7UZyLiIiC4UxbIqIOwYBPROTVwUeA+y8HNmaKfx98pNEt8iWSlA4RUds7+AjwxB8ChXzx9qmjxdsAcMXNjWuXD+zhExF58fSXzgV7QyFfvL9FMOATEXlx6nV/9zchBnwiIi8WvNPf/U2IAZ+IyIv3fxFIpSvvS6WL97cIBnwiIi+uuBm4/mvAgvMBSPHv67/WMgO2AKt0iIi8u+LmlgrwVuzhExF1CAZ8IqIOwYBPRNQhGPCJiDoEAz4RUYdgwCci6hAM+EREHYIBn4ioQzDgExF1CAZ8IqIOwYBPRNQhGPCJiDoEAz4RUYdgwCci6hAM+EREHYIBn4ioQzDgExF1CAZ8IqIOwYBPRNQhQgV8EVkkIk+JyEulvxc6HPd1EXlDRA6FOR8REQUXtoc/COBpVb0IwNOl23YeBPChkOciIqIQwgb8GwFsLv28GcCA3UGq+n0AJ0Kei4iIQggb8Jeo6jEAKP399vBNIiKiOIiquh8g8j0A77B56C4Am1U1Yzr2pKo65fGXA/i2ql5e43zrAawHgCVLlqzesmWLa/uiMjExgfnz59flXHFg+xuL7W8stv+c/v7+faraa/ugqgb+A+AIgKWln5cCOOJy7HIAh/y8/urVq7Venn322bqdKw5sf2Ox/Y3F9p8DYK86xNSwKZ3tAG4t/XwrgMdDvh4REcUkbMAfAvBBEXkJwAdLtyEiy0TkO8ZBIvIwgP8L4BIReV1EPhnyvERE5NOcME9W1eMA3m9z/xiA60y3PxrmPEREFB5n2hIRdQgGfCKiDsGAT0TUIRjwiYg6RKhBW+osw6M5bNp5BGPjeSzLpLHh2ksw0JNtdLOIyCMGfPJkeDSHzz72PPKFGQBAbjyPzz72PAAw6BO1CKZ0yJNNO4+Ug70hX5jBpp1HGtQiIvKLAZ88GRvP+7qfiJoPAz55siyT9nU/ETUfBnzyZMO1lyCdSlbcl04lseHaSxrUIiLyi4O25IkxMMsqHaLWxYBPng30ZBngiVoYA74HrD8nonbAgF+DXf35hkcPYOP2wziVL/ALoA74hUsUDQb8GuzqzwszivF8AUB9JyDVCnztGBg54YsoOgz4NXipMzcmIEUVgOwCNwDXwLd7rIC/e7r9AqPbhK9Wfl9EjcCyzBq81plHNQHJ6NHmxvNQnAvcG7cfdp3p+tD/m2rLmbCc8EUUHQZ8F8OjOZw+O+3p2KgmIDn1aI0UktXYeL7YTodmtnpg5IQvougw4DswetrWQDuvK4lUQiruS6eS6L90MdYMPYMLB3dgzdAzGB7NBTqv3wC9LJN27cW3emDkhC+i6DDgO7DraQNAprsLmz5yJbKZNARANpPGTauz2LYvV5WGCRL0nQL0wu6UY+Bz+5LIjedDfQE12kBPFl/58MqKz/srH17J/D1RABy0deCWO7ZOQFoz9ExkA4sbrr2kYnAWKAb2u69fAeDcTNcF6RREgDu27kdCBDOqjq/Z6gO4nPBFFA328B34yR2HGVgcHs1VpIIAOPZoB3qy2DW4Fvffsgpnp2dxcrIABVyDvaEdBnCJKJyO7OHblT1mLMc49bTtcsfLMmnkbIL7skzatTbeqcb8Kx9eiV2Dax3b75RuSopgVhVO4b/VB3CJKJyO6+E7lT3uHqscnPWTO+6/dLHtuZafl7Y9l5FPD7qpiFPgnlXFy0PrkGVlCxHZ6LgevlOQ3fbiLD5nOdZr7vjbB47Z3r/n5yer0i3m3H7QVJDbFQXg7+qEiDpHx/Xw7QIlABw/UzsPbmd4NOdYI++UWzfaELTG3K5UsSuBckBvpcoWYwzjtu+ebulqIqJW0FE9/OHRHASwzXGfN1ds7q1t4/bDvp8jpbb46YlbxwJuWp3Fsy+8Wb697oKZioBuXb/eSBM1U9DnOjlE9dVRAX/TziO2wV4A3HRxquI+rwuVOfXu3WipLcbAbK0Fz4ZHc9jw6AEUZoqtz43nsfVHR7Hpt64sHzsyMlL1HKdg6uWc9cB1cojqK1TAF5FFALYCWA7gFQA3q+pJyzHnA/hbAO8AMAvgAVX9n2HOG5RTblwBXL3sXMCv1fO0Ph6mLV7GCe554nA52BsKM4rPPXawHLgXzRV8YUGuomdvF0zveeIwzhRmm6JXzXVyiOorbA5/EMDTqnoRgKdLt62mAdypqu8BcBWA3xeRy0KeNxC3Waxmbj3P4dEc7nzkQKhg79YWOycn7a8iJguz5Qqg42e0ogLIKWienCw0zSJrXCeHqL7CBvwbAWwu/bwZwID1AFU9pqo/Lv38SwA/AdCQ6/UN116CVLI6Vz9xZrqiLNMpWBq9YS8TndyY8/TWiVdhBi3Ngdtv0AzTqw76HrhODlF9hc3hL1HVY0AxsIvI290OFpHlAHoAPBfyvDUZOfbceB7J0tID2UwaqYRUp0dmFdteLJTLMp3KHgH46tkb582UlkEYn6zcIcvroGUmnfI8VpAbz2P54A5k0imkkpXvNZ1K4i1zEravFbRXHWbg1Zx+yo3nkW2TTVuImpVojd6qiHwPxfy71V0ANqtqxnTsSVVd6PA68wH8I4Avq+pjLudbD2A9ACxZsmT1li1bar2HKrvHCnjw0BSmZv08S/Hgh+aHeL6z/vOTuHXF3Kr77xyZtC0HPW+u4L6+7vLt3WMF/M3BKfhNIiUBpFPARKH4msbAtPW9dSWA2y7vqhjH8Mrre6hlYmIC8+fP933+ZsH2Nxbbf05/f/8+Ve21e6xmD19VP+D0mIj8QkSWlnr3SwG84XBcCsA2AA+5BfvS+R4A8AAA9Pb2al9fX60mVrlr6Bnfwfq8uQkY5+oDcJnpCiGskaMzuPHqi6p6rie+u8P2+BNnFOb33QfgsvfkKhZO++XZaczMun9ZzwBYMC+NQ5ZlGi6rUYHkh9f3ALhXPo2MjFQd30rY/sZi+70Jm9LZDuBWAEOlvx+3HiAiAuBvAPxEVf8s5Pk88ZuPTiYEVyxOYM3QMxXBaNfgWlw4uMNxbRqvjDJMa1mn06SATHfKNjjuGlxbHjT2Oo5g91lEufpkrVm/BtbcEzVe2IA/BOAREfkkgNcAfAQARGQZgL9W1esArAHwCQDPi8j+0vM+p6rfCXluR245eDszs4pnj84AKD4nN57Hhm8dAFAMvk5VMn4Y7RkezWHj9sOuOfkzhRnb4Lj31RPYti/na9A47ooXr5PHWHNP1HihAr6qHgfwfpv7xwBcV/r5Byj2ZevGLgj5VZhVfPaxg5ieCdu/LxIAPV960tOXR75QnY/KF2bw8HNHfQX7VEJir3ixzuh1ShGx5p6o8dpypq21+sOolkkIUCPtXcEu8AalcK6n98p3OWjpa7bWrOGwvKSIvKZ+iCg+bRnwAfsgtOqeJwMthdCqCjOKjdsP4+x042fWcgVPosZr24APVPds6xXsnRZoawS79xwkdx72KsFr6oeI4tO2Ad+uKqReFKiY7DU5NR3JwK9VNpNG/6WL8ewLb/p+f35y51FV2HBvWqLGaruAPxxh/byVCOA1jT6jWpGyuH3r/sjbAwC971qEewdW4k+++RT+z6ECCh4HKcy581q993pV2DjNjuaVAFE02moDFPP2hV6kU4nywmnGB5EU+4IigfdgbzBWpxzoyVYt0BYF85aJVy9LYf5c++9v6zuyruXjtg0jUJ8Km91jhYp/O2OA2q49RrujWoOIqFO0VcB32tzbyfSM4u7rV+CVoXX43Su6kM2kHSthgubkT04W8Pnh5zE1HV3Fj5l5wbRxh7SRAo67X3nZV7ceq1pue7F6FU+n9nj5kiKiam2V0vHb4yzMajmQRLl2jtU39rwWzwuX5MbzuHNEHCeJZTPp8mYrVl56724VNlGVfNbaYtLcHk7iIgqmrXr4QXqcxvZ/cQX7ejl+RjFxZrpq+edapY8Zh1ST+bN02iMXQGQ97VpbTJrbw0lcRMG0VQ8/6AzbelbwBOG1zLMwW1yKed5b5njqcQ+P5jBxZrrq/lSyeoauXYXNmqFnIutp33RxCn/3kxnbfzvrlxYncREF01YB3zrD1otmqZcHijtvncoXKmYDp5KC9y1fiN0/O+GpreP5AjbesMJTwN2084htVc+0x0qfKHvaVy9L4bL3XOapSoeTuIiCaauAD1T2RD8//Hx5/ZmEAEkBIlwtIXKjX7ymKifef+libNuX8/XFZN6s/J4nDpfz+ulUAnNTSYxPFrDAZVMVVXiqs3fqaSuKvX+nDdmdcv5e6/RbZRJX3EtaEPnVdgHf7N6Blbh3oJhrjrM+P0rWoGeXNqklX5jBxu2HcXpqumLHq3xhtrw+UK1Zx15SM24ptNx4HhsePYCN2w/jVL5Q8eVlN4Er4+sdNv8kLi4HTc2orQZtnfitz2+ETLpy8HR4NIeeLz0ZuM3j+ULVVo5+1Tq3eTDXTmFGMZ4vlAd0H9rzWtNsoO6X37p/L+WuRPXW1j18oPgf9Y5H9vueNFVvG29Y0XRXIYLi5+fWIzV62l42inF6vJjznxewlfEL0ltnJRE1o7YN+MOjuYr8dSP4WY7Z2NwkzBr+hnQqibmpROj3brdTl8Ganw6zUUyzV9cEqftnJRE1o7YM+NYeWaP4WXvf7+YmToyqFgDY8OiBSNI6xgAscK4CylwqmhvPI5UQpJJS83zWEtNydc2pl0K1M05BeuusJKJm1JYB3+8SC80gimCfSaeqKkGiuMoxBmChKJdxWltrnQOQ6U5h4sx0RdmnEeztSi5HRpo34AfprbdKJRF1lrYM+J2aJx3PFypyywM9Wex99UQkSzt4uVI4lS9g/93XlG+bxyTMPXvzSqKtEACD9tabvZKIOk9bVul0cp7UXAkyPJrDQzGv42O2wFJpNNCTxa7Btchm0lVXBK1UseK0tASDObWatuzhR7GJeSszrnA27TxS15nEDitLO1YdtdKVWDP21jmxi/xqy4BvzZ82eUVm5IwrHD8BNYptGe3GCoZHc46vHdeVWCcEQk7soiDaMqUDnEsnvDy0znFiUDtKJaS8bHHCqctt85z7b1lVNfnLamF3quZnueqeJysmJbldZfRfuthT+/zolLXyObGLgmjbgG+24dpLqpYNbleFWcU9TxzGhm8d8FT5I3LuOW7LLaRTSdx9/QrsGlyLP79lVdUuWobxfAG3b91fDvxuVxnPvvBmzfb5Va9AaJ15u3usvvM9oprYZbyP2757mjuHdYCOCPgDPVls+q0rG92Mujk56b63bSohWPPuRRXbNrqVbiZFKgYpB3qyNdM/RsWQ03r7QDw5/HrMcLW7injw0FRkwdLLMg5R7EJmXXKkXa+G6JyOCPhAMUh1UmrHTdechOfllgHgvpuvrMoLe/ks84UZqFbvqWuII4dfj+0Y7a4ipmYRyVWE15TUhmsvQTqVrLjP78QupoU6T8cEfACc5VhyemrGc7Bf2J2yHQS0Czh2TuUL+NhVF7hupB6lKAJhLXFeRXgNwlGUinK9n87TllU6TgZ6srh96/5GN6NCFNUxcREA665YCqByEpUxUzaTTiEhxS8QJ8syadw7sBK971rkWjmze6yAu4aeCVxZY67MyXSn8JY5ifKyzFFX6cS5To6fIBy2VJTr/XSejgr4QLHH2sgF1ayaNdgDxbZt/eFRAKhY2M0YDDYGebtTCYhIVeA396yN4GQE5ju27semnUfQf+li7Dh4rOLfxG+JobVE8eRkAelUEvffsiqWEkW7eR5diWiuIOsZhLneT+cJldIRkUUi8pSIvFT6e6HNMXNF5IcickBEDovIPWHOGVazL5PcbAqzim/YrGNvNlmYxawCH7/qAtcUg11++ht7XrP9AvaTS653LtounXLb5V2RfLnUIyVlsO5nwBnE7S9sD38QwNOqOiQig6Xbf2Q55iyAtao6ISIpAD8QkX9Q1T0hzx3IqRo7PVEw+cIMnn3hTewaXOt4jN9F7bzkkodHc44zeXPjeXx++Hk8+8KbgVJFfrZjHBkZ8fSatdR70TXjfYyMjKCvry+Wc1DzCBvwbwTQV/p5M4ARWAK+qiqAidLNVOlPw/rZTpfMFJ41QNvl/f1Ylkm7Bl3jisGNeeE4u1SR0+s3ciZrMy7jQO1BNESOQ0TGVTVjun1SVe3SOkkA+wD8awB/oarWqwDzsesBrAeAJUuWrN6yZUvg9tnZPVbAAwenIn1NKkoA+N0runD1shQ2Hz6DZ48GX8uoKwGsySaxKzeDqdnK+2+7vHiOO0cmcfyM/9/f8+YK7uvrxu6xAh48NGX7+tteLNi+tvFcq4mJCcyfP993W5oF299YUba/v79/n6r22j1WM+CLyPcAvMPmobsAbPYS8E2PZwD8PYA/UNVDtRre29ure/furXWYbz1ferKpBm7bzbyupGvlTi3WdfOtspk0dg2u9bStotPrvzy0DmuGnrG92stm0o5rMBnPtWr1lAjb31hRtl9EHAN+zUFbVf2Aql5u8+dxAL8QkaWlkywF8EaN1xpHMe3zIb9vIkp3X7/CUw05BRMm2AOV6+bbMVJHQStXai0ulyuld9yeS9SKwk682g7g1tLPtwJ43HqAiCwu9ewhImkAHwDwQsjzhmJXZdF/fmd8AWQz6ZafcWwEXa+Tv8zMFS9uwbv/0sV1q5YhqpewAX8IwAdF5CUAHyzdhogsE5HvlI5ZCuBZETkI4EcAnlLVb4c8b2jm1TR3Da7FrSvmtnwgrMUIWEECZTMxVtm0++K2loa6lYq6Be8dB49x0xNqO6GqdFT1OID329w/BuC60s8HAfSEOU+9tPPGKQIgIcAdW/djWSaNm1ZnI9n6sBHMq2yGqWhxm3l9crLg+Np2lT2ZQC0gqq+Om2nrxlwD3W6lm4pzufXceB5bf3QU6VQC+cKs+xMDSiUF0zNqO/DpNBg7ryuJSQ/r/Jhz72E2O/GyKqT19fsvXVwx69go1/zEe5Ll+uSodMJGLlRfHbV4mhfmfVjbWWFGMeOyhHIY2Uwam37rStx/yyrbPPhHf/X8qvu7EsCXf3Ol7UJrVkbuPcxmJ7Vq+DPpFIZHc9jw6IGqmcF2s3q3vRht1VenbORC9cWA76ATVgycmoku4CdF8PGrLsArpTER4NzM2mRp5y0jD37vwErbpQn2vnoCDz93tKKH77bKZpglFdxm/aYSgo03rMA9TxxGweNnFGQ+gJsw783LevrUmZjSccAZuf7MqGLbvhx637UIACrGQmZUy4HavDQBcG4Jgc3/ApydrR5TmJMAjKzTwu4U7r5+RXkmbJjN0d2O2fSRK32vrHre3Gh3VAu6dDH3uiU37OE72HDtJUglOmNbxKgYPVAvvVNryuKsw1CCeYjhTOlGrXSMl1p5p2OymbTvwJhKCm662H0/YL+CzgPgpibkhgHfwUBPFps+cmXNjb2p0th43rV3aqQbbt+633c1lNsXisFrrbyXVSm9/tvP65qDq5dF+3sSdNVMbmpCbpjScWEtyzMvBtYM0qkEpmfVc565HoweqN1ntCCdCl32Witw2S3JbFfp4mVVyo03rMCGbx1w3R8YMFZg7Qr8nuwEXTWTm5qQGwZ8H8yB4vPDzze8jt0oqexKSqQDsEGlU0n0X7oY3z5wzPYxEYSe4+D2hWJNx9TKZ9eq4Tceu+eJw65rLymAO0cm8YUFuUjz5EHmGHBTE3LDlE5A9w6sRHeqOT6+Zgj2SRG894IF2LYvV94JyywhCL1gndtMYcG5GbiGKPLZAz1ZdHfV7hcdP6NNUTYZxV631L7Yww8hrklLrWhGFbt/dsJx0lTQBdWSIphVrUpp7H31BB7a81r5fAqUq4SMY6LKZ3s93vgyiSK4hpl0xfX0yQkDfggs3awU9XVGOpWs6J0aA75j43kkRKrOZw24Tv8+C9Kp8ut4CaZ+/p2jGBxlaSXFpTlyEi1qw7WXoJUrN5txNrFTKsJaxum0dHJuPF+ecGS34mUqITg9Ne1rBqtTCslOFIOjYVNRnHhFTtjDD8EIRp977CAmWyi9Y+45Lx/c0ejmlGXSKcc9cf3sh2sE8m37crhpdbZiT9vJqemqsQSnVIw5rbIgncLcVALjkwXbNXWA6AZHw6SieHVAbhjwQ7JW7jz83FHfe7fW29npGdy+dT827TyC7lSiab6sxOVqKUiqJF+YwY6DxzD6xWvK9zl9wVlTNtbAOZ4vIJ1K4v5bVpX/vXvftaj8hbBoruALN0YzOBqmtNLt6oABn5jSidC9Ayvxs69c15SpEjOjrDw3nq9ZY+6mO5XAvK7o1tUfd6niCZoqOTlZqEhpJB2+Vaz3OwXOOx85UE6VACjvqXBfX3dkATXopCuAE6/IHQN+DGptMBJlkAwrzKQt85LLUai1A1VQ5ty309WX9X6nADmjGvvqlWFKK7k1I7lhSicGtWZJrhl6BqenWr/HFXVZqlsP1rzpiV+50pIOAz1ZZB3SJdarMi+VOXGmSoKWVnLiFblhwI+J239YXl7b27TzSHlHrv5LF1cMtoYtfzUGLr0GRK+7nwX9t4xrc5OgSzJQZ2DAbwDW79szPhNjoxHz/QJvdf5Oxxm9cfNa/W4B0Ro4Ew67dAVJlcRdScOJV+SEOfwGaPVNxBtB4Vz7bj3Oid/euHmj+/tuvjLwQKoVlzCmRmHAbwDzoBx5pyhugiJwrrbJZtKOn+uyTDrw1oEDPVnctDpbPm9SBDetDtaTZiUNNQoDfoMYvcdXhtbhlaF1+PhVFzS6SS3hTGEW99+yyrXH7VbWGLR3PTyaw7Z9uXJax9jhK0iVzgKHdfad7ieKCgN+k7h3YCX+/JZVFaV4/BKoZtTC37F1P+amEsikU1Wli25ljUF711GmYZwmmLlNPCOKAgdtm4jdYNvLb05g189ONKhFzcnoZRtLJGTSqaqBV6eBy6CzWKNMwzhNMHObeEYUBfbwm9xD/+Xfsqdfw3i+gDu27sfnh533uTUEncUa5YQmTo6iRmHAbwH3DnCAtxYF8NCe1xxz6sYKkm6pIDdhljuI87WI/GBKp0VsuPYST/urNqtMOoWNN6wAANz5yIFYFphToGLmq3kPYnN9/snJ6oXQaolyQhMnR1GjMOC3CCMYbNx+uLyFoAjQ5AtzIusQzPxsZj6vK+l5zR4jp26d3FRrsxQvopzQZH0t8+Yu/AKguIQK+CKyCMBWAMsBvALgZlU96XBsEsBeADlV/Y0w5+1UdkHCT+Csp4QAf3azfQ/arod78a9MYc8/2W9yPqvF+nsve+IqSmsVnZ2OdFmEuJZCMF6ba9hTPYTt4Q8CeFpVh0RksHT7jxyO/a8AfgLgrSHPSSV2vf5mMauoCFrDo7mKdi7sTuHu61eU38PIyAiy2fMqllQw5AszqN7Q0JnXZSu8DpLaBeQNjx7Axu2HcSpf3BBl3QUz6HN5vtuXBdewp3oJO2h7I4DNpZ83AxiwO0hE3glgHYC/Dnk+shjoyWL/3ddg/RVdvgZ261HybQSt4dEc/tvW/RVfSicnC9jw6IGKQVa3FTGj3qTFzyCpXUAuzCjG84XybN0HD03ZDhh7mdnLmbdUL6IhksAiMq6qGdPtk6q60Oa4RwF8BcCvAPiMW0pHRNYDWA8AS5YsWb1ly5bA7fNjYmIC8+fPr8u54mBu/+6xAh48NIUpmxiZBPDJK7rwwMGpurWtS4Aph1+z8+YK7uvrxsTEBD79g/rNPOo/P4lbV8z1dOxt3z3t6TjjvZjdOTKJ42eq37z5WC/HxK2dfv9bUZTt7+/v36eqvXaP1UzpiMj3ALzD5qG7vJxcRH4DwBuquk9E+modr6oPAHgAAHp7e7Wvr+ZTIjEyMoJ6nSsO5vb3AbjMVKGSLK30aB5A3fHaM3VZsVPgHOwB4MQZRV9fH/7km09BMOUjcRPOi7/s8vzvnd3j7bM6fkZx157ZipTNie/ab6lovG8A+MKC6rGYdCqJL9y4En11Sum00+9/K6pX+2sGfFX9gNNjIvILEVmqqsdEZCmAN2wOWwPgBhG5DsBcAG8VkW+o6scDt5pqqlVR4nW997C8BPDh0Ry2vVioeazd0sfzupJYdf4C7P7ZCV9fFn7SJX4+K+uAq5eZvSzTpHoJO2i7HcCtAIZKfz9uPUBVPwvgswBQ6uF/hsG+8eyCTP+li7FtX66uVT8KeJ5foCiWeZqD4t5XT+ChPa/5vjLwM6vV+lllulOYODPt2GbzgKvXDVe4hj3VQ9iAPwTgERH5JIDXAHwEAERkGYC/VtXrQr4+xcguyPS+axFu37rf8TmZdCryiiCvk8mymXR5AxNr1Y8fQWa12pXEGikzO+ZtFQH23qk5hAr4qnocwPtt7h8DUBXsVXUEwEiYc1K8BnqyuOeJw7Y17wu7Uxj94jXo+dKTNWvikw47RIVx4vTZ8rm97oBlJkA54AIINdHJ+AJYM+Sc3zendhjgqRlwLR2qcvf1K5BKVlbMpJKCu68vLo3gZVXHsME+IUB3qvLXM1+YLX/R+H31bCaNl4fWla8QgmyCYsdt9zLuYkXNhksrUJVaaYh67Mk7q8DZ6WiuENKpJPovXVzu0dvtTxt0opNxvFMajLX01EwY8MmWWxqiXhU+Qa4SBMDV716EV47nHQejnV43N57HhYM7fKd4Bnqy+OPHD9jW0nPJY2omTOmQb828J+/HrroAH+mt3D9gx8Fjnr+c/KR4jAXPLhzcgV+erQ72UnqtNUPPBEoXEUWNPXwKxHwF4DZwWW87Dh6r6M0HbVetFI91fR27yWXGXVwMjZoFe/gUmtvAZb2dnCxElmpyy7/bra/jhgO41AwY8Ck0a4on6WE3bq+r5qRTyVi2ePRyfrf8e5DBWA7gUqMxpUORsBvk/fzw83j4uaOYUYUA6C5tZOKlht5aM//N515DmM2+MukU5r1lTnkgt1aqx5x/txvADVKpxAFcajQGfIrNvQMrce/Ayor7vOT7kyK47+YrK8YIwgT7dCqJjTesKK/LXyu1Yv5Cyo3nccfW/dj76omK9+K3Uol71lIzYEqH6spLWmNGtaJKJuyAsLFJuXltejvpVBKZdKrq6sNug3RzGksAzJtTnIlsbIz+8asuqEhxmfcGIGoU9vCprrymQsxVMmGWaTAPJ7gNtBpLR9/hMIHKukE6UJnGslvellsXUrNhD5/qyk9Fj3E1EGaZBlWUd9ZyuroQALsG15aXM3ZiTMzyWlfvtnUhUSMw4FNdWVMh2UwamXTK9lgj+Iad4FWYUWzaecQxmJvv33DtJa4VPH4mZnHrQmo2DPhUdwM9WewaXFtezGzjDSvQZflNNA9y2l0VGOWafq4WnF7HPJg60JPFx666oGbZppee+oIaX2RE9caATw030JPFbZd3VfT6jYFW43HrVcFXPlysADLf71b/vyyTdnwdaz793oGVuP+WVeXjnLgtmzA8msPpqemq+1MJYbUONQwHbakpXL0shc/9xz7Hx50WczPfPzyas909K5U8F2S9rk1vXjHUbZDZSO984j1JmFu/aecRFGaqxx7mz53DAVtqGAZ8ahtGIDXvhLWwO4V1VyzFpp1HcMfW/bYrYRq1+ealoAF4rrPPF2aw7cVZfM50n1Oe3steAkRxYcCntmK3FaFbaaTd4xu+dQDTqvBTHGRdGtnL5uVE9cYcPrW1WqWRdo8XZv0FewA4b25ltt/LAHGczEs3c3lmMrCHT22tVmmk3xLJdCoBQCq+JNKpJG66uDK4N3Lzck74IicM+NTWaqVW/C6CNjeVxN3Xr6gK5JlTL1Ud26jNy92uahjwOxsDPrU1u0XOrDX+TvvR2hmfLNgG8pGR6oDfKJzwRU6Yw6e2Vqv2fqAn6zjT104rDLp6mVFMnYk9fGp7tVIrG29Y4akEs1WWOK51VUOdiwGfOp7TAKvdfbVy4HY1/dbneDkmjvdj3g+g3gPJ1BwY8IngPpPXK7fqGODcrF3rBitxVNDYvR+39mUiOzM1MwZ8oog4Vcds3H4YZ6dny49ZS/ztKmji6Im7Ve98+SoO53UC/isTRcRxOYV8oeb4gLk01Lwzl7Ec8x1b92N5yElUrN6hUAFfRBaJyFMi8lLp74UOx70iIs+LyH4R2RvmnETNKkwVjADlQG7XE7emgIIEfVbvUNge/iCAp1X1IgBPl2476VfVVaraG/KcRE3JaTmFhd21yz6NLRSB2j3uoLtmRb3cA5dvaD1hA/6NADaXft4MYCDk6xG1LKea/7uvX+FpoxYj0HvpcQdJw3jdD8DMKajbpZ2CXnlQ/YiG2C9URMZVNWO6fVJVq9I6IvIygJModmT+l6o+4PKa6wGsB4AlS5as3rJlS+D2+TExMYH58+fX5VxxYPsbq1b7d48VsO3FAo6fUSQAzNocc95cwX193dg9VsCDh6YwZXeQ5dio2LXfrh1dCeC2y7vK7yXudnnV7r8/fvT39+9zyqTUDPgi8j0A77B56C4Amz0G/GWqOiYibwfwFIA/UNXv12p4b2+v7t1bn5T/yMgI+vr66nKuOLD9jeWn/dbySKCYWjH3to0qHWsZp92xcbV/zdAztusMZTNpjJV69lYC4OWhdZG1y6tO+v2pRUQcA37NskxV/YDLC/9CRJaq6jERWQrgDYfXGCv9/YaI/D2A9wGoGfCJ2pGXlTStO3k1YrKUW1UP1/tvTWHr8LcDuBXAUOnvx60HiMg8AAlV/WXp52sAfCnkeYlamp+VNBu16qZbUOfyDa0p7KDtEIAPishLAD5Yug0RWSYi3ykdswTAD0TkAIAfAtihqt8NeV4iiplbVU+QAWBqvFA9fFU9DuD9NvePAbiu9PPPAVwZ5jxEVH/WjdyTIhUloY268qDgONOWiBwN9GTLPf2ZUoEHSzBbFwM+EbmqtS8wtQ4GfCJyxTV42gcDPhG54ho87YMBn4hcRb0GDzUO18MnIldeJopRa2DAJ6KaWILZHpjSISLqEAz4REQdggGfiKhDMOATEXUIBnwiog7BgE9E1CFYlklE1CTi3uyGAZ+IqAlYt740ViUFEFnQZ0qHiKgJ1GNVUgZ8IqImUI9VSRnwiYiaQD1WJWXAJyJqAvVYlZSDtkRETaAeq5Iy4BMRNYm4VyVlSoeIqEMw4BMRdQgGfCKiDsGAT0TUIRjwiYg6hKhqo9vgSETeBPBqnU73NgD/XKdzxYHtbyy2v7HY/nPepaqL7R5o6oBfTyKyV1V7G92OoNj+xmL7G4vt94YpHSKiDsGAT0TUIRjwz3mg0Q0Iie1vLLa/sdh+D5jDJyLqEOzhExF1iLYM+CLyIRE5IiI/FZFBm8dFRL5WevygiLzX9NjXReQNETlkec4mEXmhdPzfi0imxdr/x6Vj94vIkyKyrJXab3r8MyKiIvK2Vmq/iGwUkVzp898vIte1UvtLj/1B6XUPi8j/aKX2i8hW02f/iojsb7H2rxKRPaX27xWR9wVqnKq21R8ASQA/A/CvAHQBOADgMssx1wH4BwAC4CoAz5ke+/cA3gvgkOU51wCYU/r5TwH8aYu1/62mn/8QwF+1UvtLj50PYCeKczPe1krtB7ARwGda+Pe/H8D3ALyldPvtrdR+y/PvA/DFVmo/gCcB/Lrp+SNB2teOPfz3Afipqv5cVacAbAFwo+WYGwH8rRbtAZARkaUAoKrfB3DC+qKq+qSqTpdu7gHwzhZr/7+Ybs4DENfgTSztL7kfwH9HfG0H4m1/PcTV/t8DMKSqZ0vHvdFi7QdQ7F0DuBnAw7G0Pr72K4C3ln5eAGAsSOPaMeBnARw13X69dJ/fY9z8ZxS/oeMQW/tF5MsichTAxwB8MWQ7ncTSfhG5AUBOVQ9E0UgXcf7+fLp0Cf91EVkYrpmO4mr/xQB+TUSeE5F/FJF/E7ql9uL+//trAH6hqi8FbqG7uNp/O4BNpf+/XwXw2SCNa8eALzb3WXuEXo6xf3GRuwBMA3jIZ7u8iq39qnqXqp6PYts/HaBtXkTefhHpBnAX4vuSqjidzX1RfP5/CeDdAFYBOIZiWiEOcbV/DoCFKKYgNgB4pNRbjlqs/38BfBTx9e6B+Nr/ewDuKP3/vQPA3wRoW1sG/NdRzPUa3onqyx8vx1QRkVsB/AaAj2kpmRaD2Npv8k0ANwVqXW1xtP/dAC4EcEBEXikd/2MReUfo1laL5fNX1V+o6oyqzgL43yhe+schrt+f1wE8VkpD/BDALIrrv0Qtzv+/cwB8GMDWkG10E1f7bwXwWOnnbyHg7087BvwfAbhIRC4UkS4Avw1gu+WY7QB+pzRafhWAU6p6zO1FReRDAP4IwA2qOhlHw0viav9Fpps3AHghykabRN5+VX1eVd+uqstVdTmK/2Heq6r/1ArtBwAjR1vymwBsq5AiEEv7AQwDWAsAInIxigOScSxWFlf7AeADAF5Q1dejbXKFuNo/BuA/lH5eCyBYSirsqHQz/kFxFPtFFEfL7yrd9ykAnyr9LAD+ovT48wB6Tc99GMVL7gKKgeWTpft/imLebX/pTyxVLjG2fxuKQeYggCcAZFup/ZbXfwUxVenE+Pn/XenYgyj+h1/aYu3vAvCN0u/QjwGsbaX2lx570HiNOP/E9Pn/OwD7UKz6eQ7A6iBt40xbIqIO0Y4pHSIissGAT0TUIRjwiYg6BAM+EVGHYMAnIuoQDPhERB2CAZ+IqEMw4BMRdYj/D+Fgr/RedIr8AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x,y,\"o\")\n",
    "plt.plot([0.017573927546898845],[-0.025715702764494558],\"o\")\n",
    "#plt.ylim(0,0.5)\n",
    "plt.grid()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 夏普比率与最佳投资组合\n",
    "\n",
    "夏普比率（ Sharpe ratio），是指投资组合）在对其调整风险后，相对于无风险资产的表现。\n",
    "\n",
    "它代表投资者额外承受的每一单位风险所获得的超额收益。对一个投资组合而言，夏普比率越高越好。\n",
    "夏普比率 = (回报率 – 无风险利率)/标准差\n",
    "\n",
    "\n",
    "假设目前投资一个预期回报率为12%，波动率（标准差）为10%的投资组合。无风险利率是5%。\n",
    "夏普比率就是：\n",
    "\n",
    "$$ (Ra−Rf)/ σa = (0.12−0.05) /0.1 = 0.7 $$\n",
    "\n",
    "一般来说单纯买入并持有指数，例如持有标普500指数，夏普率大约在0.5左右，而经过资产配置后的投资组合，夏普率通常可以得到提升，如果是接近1，就是不错的策略，如果是1.5以上那就非常优秀了。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "def min_sharpe(weights):\n",
    "    \n",
    "    weights = weights/np.sum(weights)\n",
    "    z_r=np.sum(np.dot(r_log.dropna(),weights))\n",
    "    z_f=np.sqrt(np.dot(weights, np.dot(r_log.dropna().cov(), weights)))\n",
    "\n",
    "    return z_f/z_r#optimize是去最小值，所以这里用夏普率的倒数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.036393939986700014"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "min_sharpe(weights)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     fun: -0.6833928556353901\n",
       "     jac: array([-0.        ,  3.96703061, 17.89853101, 12.26254153,  6.69299625])\n",
       " message: 'Optimization terminated successfully'\n",
       "    nfev: 48\n",
       "     nit: 9\n",
       "    njev: 8\n",
       "  status: 0\n",
       " success: True\n",
       "       x: array([1.00000000e+00, 1.36657175e-13, 0.00000000e+00, 0.00000000e+00,\n",
       "       5.67766337e-14])"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import scipy.optimize as sco\n",
    "\n",
    "noa=len(stock_set)\n",
    "#约束是所有参数(权重)的总和为1。这可以用minimize函数的约定表达如下\n",
    "cons = ({'type':'eq', 'fun':lambda x: np.sum(x)-1})\n",
    "\n",
    "#我们还将参数值(权重)限制在0和1之间。这些值以多个元组组成的一个元组形式提供给最小化函数\n",
    "bnds = tuple((0,1) for x in range(noa))\n",
    "\n",
    "#优化函数调用中忽略的唯一输入是起始参数列表(对权重的初始猜测)。我们简单的使用平均分布。\n",
    "opts = sco.minimize(min_sharpe, noa*[1./noa,], method = 'SLSQP', bounds = bnds, constraints = cons)\n",
    "\n",
    "opts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "w=np.array([1.00000000e+00, 1.36657175e-13, 0.00000000e+00, 0.00000000e+00,5.67766337e-14])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.025715702764494558"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sum(np.dot(r_log.dropna(),w))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.017573927546898845"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(np.dot(w, np.dot(r_log.dropna().cov(), w)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-1.4632871733349349"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "-0.025715702764494558/0.017573927546898845"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-2.045160723932827"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "-0.025715702764494558/0.012573927546898845"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['2233', '9990']"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"2233,9990\".split(\",\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### classwork 6\n",
    "\n",
    "* 找一个组合收益为正的股票组合，看此时的最佳组合位置\n",
    "\n",
    "* 如果使用下行风险代替风险，看看散点图有何变化\n",
    "\n",
    "* 下行风险下的最优组合怎样计算？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## CAPM\n",
    "\n",
    "https://zhuanlan.zhihu.com/p/366322544\n",
    "\n",
    "在20世纪60年代，三位学者Sharpe（1964），Lintner（1965），Mossin（1966）在Markowitz模型框架下不约而同推导除了奠定现代投资学的经典模型：资本资产定价模型（Capital asset pricing model，CAPM）。三位学者经过严格的推导都得出以下结论：对于任意的资产组合，其收益率 满足以下关系式：\n",
    "\n",
    "$$ E(R_q)-R_f=\\beta_{qm}[E(R_m)-R_f] $$\n",
    "\n",
    "该公式被称为传统的CAPM应模型，其中：Rm是市场投资组合之收益率，该组合是市场上所有风险资产的组合，包括股票等金融资产，也包括黄金等实物资产，在现实中构建这样的投资组合时不大可能实现的，因此在实务中常常以大盘指数来替代市场投资组合，根据大盘指数计算出来的收益率被看做Rm\n",
    "\n",
    "$$ \\beta_{qm}=\\frac{\\sigma(R_q,R_m)}{\\sigma^2(R_m)} $$\n",
    "为投资组合q的beta值，其中分母为资产组合收益率与市场投资组合收益率的协方差， \n",
    "分子为市场投资组合的方差，beta贝塔值反映出资产组合q的系统性风险；如果拟采用大盘指数来计算Rm，那么系统性风险那就是大盘的涨跌。\n",
    "\n",
    "\n",
    "E(R_q)-R_f为风险投资组合q比无风险利率高出的期望收益率，高出来的部分是因为投资人在持有风险组合q时，承担了更多的风险，因此E(R_q)-R_f被称为风险溢价（Risk Premium）。\n",
    "\n",
    "CAPM中的投资组合q可以是任意投资组合，也可以是单只股票，单只股票我们用小写i表示，那么就可以得到单只股票的CAPM公式\n",
    "$$ E(R_q)=R_f+\\beta_{qm}[E(R_m)-R_f] $$\n",
    "\n",
    "\n",
    "其中的$\\beta_{qm}$可以反映出单个资产的系统风险水平，若等于1，则资产i的价格和市场投资组合的价格波动性是一样的。如果小于1，则资产i的价格波动程度小于市场投资组合的；若大于1，则资产i的波动性更大。值为正就说明资产i的价格和市场投资组合价格变动同方向，反之则相反变动。\n",
    "\n",
    "CAPM模型说明，单只股票的期望收益是无风险收益加上系统性风险溢价，非系统性风险可以通过分散化投资消除，所以没有对应的风险溢价。\n",
    "\n",
    "\n",
    "\n",
    "CAPM公式中个股和大盘的收益率都是期望值，Jenson（1968）在研究共同基金表现时将CAPM模型写成如下形式：\n",
    "\n",
    "$$ E(R_{it})-R_{ft}=\\alpha_i+\\beta_{i}[E(R_{mt})-R_{ft}]+\\varepsilon_{it} $$\n",
    "\n",
    "进行实证分析，$ R_{it},R_{ft},R_{mt}$\n",
    " 对应的是个股i、无风险资产（通常是银行存款、国债）、市场指数（大盘指数）的收益率之时间序列资料，对这些资料进行线性回归分析，得到未知参数alpha和beta的估计值 \n",
    " 。式子中的alpha是由Jenson引入的，所以又被称为Jenson's Alpha。根据CAPM模型之假设， \n",
    " $ R_{it}$是服从正态分布的随机数，这样就可以判断 alpha和beta\n",
    " 之统计显著性。 \n",
    " 可以解释个股过去的收益率与风险之间的关系， \n",
    " 表示收益率胜过大盘的部分，通常也用来衡量基金经理的绩效。现在所有的投资者在做的事情都可以用一句话来概括，就是试图运用各种方法创造显著的正阿尔法。这些方法包括：基本面分析，消息面分析，技术面分析和阿尔法策略。\n",
    "\n",
    "阿尔法策略的重点在于通过构建投资组合对冲掉系统风险，锁定alpha超额收益。若在有卖空机制的市场，对冲投资组合比较好构建。首先明确整个投资组合的资金，然后确定出具有较高alpha收益的、需要最多的证券组合和具有市场指数特征、用来对冲掉系统风险的、需要做空的证券组合，其次分配好资金的比重，最终获得稳定的Alpha收益率。另外也可以用证券和股指期货结合进行操作，比如投资者预测出未来会跑赢大盘的证券，则可以在证券市场将其买入，同时在期货市场卖空股指期货合约，以对冲系统性风险，这样市场的涨跌不会影响到投资组合的收益率。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### classwork6 \n",
    "\n",
    "* 获取数据SHSE.000902与SHSE.600596的数据在2014-01-01到2014-12-31之间的数据\n",
    "\n",
    "* 由于数据缺失，通过pd.merge基于时间连接数据，并计算对应的Ri Rm Rf，然后做出Rm-Rf 与Ri-Rf的散点图\n",
    "\n",
    "* 我们以2020年贵州茅台600519的收益率作为CAPM模型中的 ,沪深300指数作为基准收益（000300,来计算茅台的Beta值。另外无风险利率为一年期的国债利率，其年化为3.6%,则日无风险利率为："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [],
   "source": [
    "#stock_zh_kcb_daily_df = ak.stock_zh_kcb_daily(symbol=\"sh688399\", adjust=\"hfq\")\n",
    "#print(stock_zh_kcb_daily_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    index_code display_name publish_date\n",
      "0       000001         上证指数   1991-07-15\n",
      "1       000002         A股指数   1992-02-21\n",
      "2       000003         B股指数   1992-02-21\n",
      "3       000004         工业指数   1993-05-03\n",
      "4       000005         商业指数   1993-05-03\n",
      "..         ...          ...          ...\n",
      "704     399994   中证信息安全主题指数   2015-03-12\n",
      "705     399995     中证基建工程指数   2015-03-12\n",
      "706     399996     中证智能家居指数   2014-09-17\n",
      "707     399997       中证白酒指数   2015-01-21\n",
      "708     399998       中证煤炭指数   2015-02-13\n",
      "\n",
      "[709 rows x 3 columns]\n"
     ]
    }
   ],
   "source": [
    "index_stock_info_df = ak.index_stock_info()\n",
    "print(index_stock_info_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [],
   "source": [
    "#ak.stock_zh_index_daily(symbol=\"sz399552\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>日期</th>\n",
       "      <th>收盘</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-02-01</td>\n",
       "      <td>48.11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-02-02</td>\n",
       "      <td>48.13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-02-03</td>\n",
       "      <td>49.98</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-02-04</td>\n",
       "      <td>51.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-02-05</td>\n",
       "      <td>48.63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>477</th>\n",
       "      <td>2023-01-19</td>\n",
       "      <td>32.72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>478</th>\n",
       "      <td>2023-01-20</td>\n",
       "      <td>33.15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>479</th>\n",
       "      <td>2023-01-30</td>\n",
       "      <td>33.20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>480</th>\n",
       "      <td>2023-01-31</td>\n",
       "      <td>33.71</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>481</th>\n",
       "      <td>2023-02-01</td>\n",
       "      <td>33.73</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>482 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             日期     收盘\n",
       "0    2021-02-01  48.11\n",
       "1    2021-02-02  48.13\n",
       "2    2021-02-03  49.98\n",
       "3    2021-02-04  51.01\n",
       "4    2021-02-05  48.63\n",
       "..          ...    ...\n",
       "477  2023-01-19  32.72\n",
       "478  2023-01-20  33.15\n",
       "479  2023-01-30  33.20\n",
       "480  2023-01-31  33.71\n",
       "481  2023-02-01  33.73\n",
       "\n",
       "[482 rows x 2 columns]"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pa=ak.stock_zh_a_hist(symbol=\"000902\", period=\"daily\", start_date=\"20210201\", end_date='20230201', \n",
    "                     adjust=\"hfq\")[[\"日期\",\"收盘\"]]\n",
    "pa"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.12"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "245.76px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
